DefaultTypeMapping.java
package org.codefilarete.stalactite.sql.ddl;
import java.io.File;
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.file.Path;
import java.sql.Blob;
import java.sql.Timestamp;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.UUID;
import static org.codefilarete.stalactite.sql.ddl.Size.fixedPoint;
import static org.codefilarete.stalactite.sql.ddl.Size.length;
/**
* A default mapping between Java types and SQL type names.
* This is only used for column types when generating DDL (in upper modules). One can easily overwrite types.
*
*
* <br>
* <table>
* <thead>
* <tr><td>Java</td><td>SQL type names</td></trt>
* </thead>
* <tr><td>Boolean</td><td>bit</td></trt>
* <tr><td>Double</td><td>double</td></trt>
* <tr><td>Float</td><td>float</td></trt>
* <tr><td>Long</td><td>bigint</td></trt>
* <tr><td>Integer</td><td>integer</td></trt>
* <tr><td>Date</td><td>timestamp</td></trt>
* <tr><td>LocalDateTime</td><td>timestamp</td></trt>
* <tr><td>String</td><td>varchar</td></trt>
* <tr><td>String with size</td><td>varchar(size)</td></trt>
* </table>
*
* @author Guillaume Mary
*/
public class DefaultTypeMapping extends JavaTypeToSqlTypeMapping {
public DefaultTypeMapping() {
super();
put(Boolean.class, "boolean");
put(Boolean.TYPE, "boolean");
put(Double.class, "double");
put(Double.TYPE, "double");
put(Number.class, "double");
put(Float.class, "float");
put(Float.TYPE, "float");
put(BigDecimal.class, "decimal($p, $s)", fixedPoint(38, 2));
put(BigInteger.class, "bigint");
put(Long.class, "bigint");
put(Long.TYPE, "bigint");
put(Integer.class, "integer");
put(Integer.TYPE, "integer");
put(Byte.class, "integer");
put(Byte.TYPE, "integer");
put(byte[].class, "blob");
put(Blob.class, "blob");
put(InputStream.class, "blob");
put(Timestamp.class, "timestamp");
put(Date.class, "timestamp");
put(java.sql.Date.class, "timestamp");
put(LocalDate.class, "timestamp");
put(LocalDateTime.class, "timestamp");
put(LocalTime.class, "timestamp");
put(Instant.class, "bigint");
put(String.class, "varchar(255)");
put(String.class, "varchar($l)", length(Integer.MAX_VALUE));
// 35 chars because the largest timezone found is "America/Argentina/ComodRivadavia" (with ZoneId.getAvailableZoneIds())
put(ZoneId.class, "varchar(35)");
// necessary entry for Enum, "integer" because Enum are stored by their ordinal by default, see ParameterBinderRegistry.lookupForBinder(Class)
put(Enum.class, "integer");
put(UUID.class, "varchar(36)"); // 36 because it UUID length as String
put(Path.class, "varchar");
put(Path.class, "varchar($l)", length(Integer.MAX_VALUE));
put(File.class, "varchar");
put(File.class, "varchar($l)", length(Integer.MAX_VALUE));
}
}